package br.com.bean;

import java.io.Serializable;
import java.util.List;

import javax.enterprise.context.ApplicationScoped;
import javax.inject.Inject;
import javax.inject.Named;

import br.com.domain.Domain;
import br.com.domain.Menu;
import br.com.domain.MenuItem;
import br.com.domain.Perfil;
import br.com.domain.PerfilMenu;
import br.com.domain.Usuario;
import br.com.exception.ServiceException;
import br.com.service.DomainService;
import br.com.service.PerfilService;
import br.com.service.UsuarioService;

@Named
@ApplicationScoped
public class StartupBean implements Serializable{
	
	private static final long serialVersionUID = 1L;
	
	/**************************************************************************/
	/**                               ATRIBUTOS                              **/
	/**************************************************************************/
	
	@Inject DomainService domainService;
	@Inject PerfilService perfilService;
	@Inject UsuarioService usuarioService;
	
	/** DADOS INICIAIS FIXOS DOS SISTEMA **/
	static boolean dadosIniciaisCriados;
	List<Domain> listDomain;
	

	/**************************************************************************/
	/**                                M�TODOS                               **/
	/**************************************************************************/
	
	/** CRIANDO DADOS FIXO DA APLICACAO.. **/
	public void createDadosIniciais() throws ServiceException { 
		try {
		
			if (!dadosIniciaisCriados) {
				this.createUsuarioAdmFixo();
				dadosIniciaisCriados = true;			
			}
		
		} catch (Exception e) {
			System.err.print("Erro na cria��o dos dados iniciais\n" + e.getMessage());
		}
	}
	
	
	/** USUARIO ADM FIXO **/
	public void createUsuarioAdmFixo()  {
		
		try {
			
			Perfil perfil;
			
			/** BUSCANDO PERFIL ADMINISTRADOR  **/		
			perfil = (Perfil) perfilService.buscarPorNomeFixo("Administrador");
					
			
			/** NAO ACHOU - CRIAR *******************/		
			if (perfil == null) {
				 
				 perfil = new Perfil();
				 perfil.setFixo(true);
				 perfil.setNome("Administrador");
				 perfil.setAdministrador(true);
				 perfil.setId(perfilService.salvar(perfil).getId());
				
				 
				 MenuBean menuBean = new MenuBean();
				 
				 /** PERFIL MENU ADMINISTRADTIVO **/
				 for (Menu menu:  menuBean.getListMenu()) {
					
						for (MenuItem menuItem:  menu.getListMenuItem()){
							
							PerfilMenu perfilMenu = new PerfilMenu();
							perfilMenu.setIdMenu(menu.getId());
							perfilMenu.setAlterar(true);
							perfilMenu.setExcluir(true);
							perfilMenu.setIdMenuItem(menuItem.getId());
							perfilMenu.setIncluir(true);
							perfilMenu.setNomeMenuItem(menuItem.getNome());
							perfilMenu.setPerfil(perfil);
							perfilMenu.setVisivel(true);
							perfil.getListPerfilMenu().add(perfilMenu);
							
						}
				 }
				
				 /** SALVANDO PERFIL **/		
				 perfil = (Perfil) perfilService.salvar(perfil);
		    }
			
	
			/** USUARIO ADMINISTRADOR *********************************/
			
			Usuario usuario;
			
			/** VERIFICA SE EXISTE ADMINISTRADOR **/
			usuario =  usuarioService.buscarLogin("admin");
			          
			
			/** NAO ACHOU - CRIAR *******************/			
			if (usuario == null) {
				usuario = new Usuario();
				usuario.setNome("Administrador");
				usuario.setFixo(true);					
				usuario.setLogin("admin");
				usuario.setSenha("admin");
				usuario.setPerfil(perfil);
				
				/** SALVANDO USUARIO **/
				usuarioService.salvar(usuario);		
				
			}
		
		} catch (Exception e) {
			System.err.print(e.getMessage() + "\n" + e.getCause());
		}	
	}
	

}
